; v1.01_bate 

#Requires AutoHotkey v2.0
#Include SimLog.ahk
#Include FileTool.ahk
#Include GuiWindowTmp.ahk
#Include ShortCut.ahk

; 字体管理器
class FontManager {

    __new() {

        ; 存储快捷方式的临时文件夹目录
        this.fontManagerTmp := A_WorkingDir . "\FontManagerTmp"

        ; 配置文件位置
        this.conf := A_WorkingDir . "\FontManager.ini"

        ; 运行时配置文件位置
        this.runTimeConf := A_WorkingDir . "\FontManager_RunTime.ini"

        ; 日志对象
        this.logger := SimLog()

        ; ----- Conf -----

        ; 默认要管理的文件目录
        this.defFontDir := IniRead(this.conf, "Config", "defFontDir", "")

        ; 系统字体文件夹
        this.sysFontDir := IniRead(this.conf, "Config", "sysFontDir", "C:\Windows\Fonts\")

        ; 快捷方式前缀
        this.lnkPre := IniRead(this.conf, "Config", "lnkAutoInNo", "FD_")

        ; ----- RunTime -----

        ; 快捷方式序号(自增)
        this.lnkAutoInNo := IniRead(this.runTimeConf, "RunTime", "lnkAutoInNo", 0)

    }

    ; 安装字体(尝试从目录中安装字体)
    /* 
       参数
       1.fontDir 安装字体的文件夹

       具体实现
       1.创建字体的快捷方式
       2.将字体快捷方式复制到Window系统的`Fonts`目录下
    
    */
    installFont(fontDir := this.defFontDir) {

        ; 无参数。。。
        if (!fontDir) {
            return
        }

        ; 文件路径不存在
        if (!FileExist(fontDir)) {
            return
        }

        this._installFont(fontDir)
    }

    _installFont(fontDir) {
        
        ; 获取快捷方式序号(自增)
        this.lnkAutoInNo := IniRead(this.runTimeConf, "RunTime", "lnkAutoInNo", 0)

        ; 创建临时文件夹，用于存储快捷方式
        DirCreate(A_WorkingDir . "\FontManagerTmp")
        
        ; 遍历文件
        Loop Files, fontDir . "\*", "FR" {

            ; 是否是字体文件
            if (this._isFontF(A_LoopFileExt)) {

                ; 创建快捷方式
                sc := ShortCut(A_LoopFileFullPath, this.fontManagerTmp . "\" . this.lnkPre . ++this.lnkAutoInNo . ".lnk")
                sc.create()
                
                ; 将快捷方式移动到字体目录(第三个参数为1表示覆盖现在的文件)
                FileCopy(sc.linkFile, this.sysFontDir, 1)
            }
        }
        
        IniWrite(this.lnkAutoInNo, this.runTimeConf, "RunTime", "lnkAutoInNo")
        MsgBox("安装完成")
    }

    ; 卸载字体(使用此管理器安装的)
    /* 待完善
       #.目前的功能是删除Font目录下所有的快捷方式
       #.以字体的名字为参数删除目录(待完善)
    
    */
    unInstallFont() {
        this.unInstallFontAll()
    }

    ; 卸载(使用此管理器安装的)所有字体
    unInstallFontAll(){
        FileDelete(this.sysFontDir . this.lnkPre . "*.lnk")
        MsgBox("卸载完成")
    }

    
    ; 判断文件的后缀名是否是字体文件
    _isFontF(key){
        switch key, 0 {
            case "ttf": return true
            case "otf": return true 
            case "fon": return true  
            default: return false
                
        }
    }
}